﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//importamos
using EventSys.BussinesEntities;
using PagedList;

namespace EventSys.Repository
{
    public class ParticipanteRepository : MasterRepository, IParticipanteRepository
    {
        public List<Participante> GetAllFromParticipante()
        {
            var participante = Context.Participantes.ToList();

            return participante;
        }

        public List<Participante> GetParticipanteByCriterio(string criterio)
        {
            var participante = Context.Participantes.ToList();
            if (criterio != "" && criterio != null && !string.IsNullOrEmpty(criterio))
            {
                participante = (participante.Where(
                                             a => //a.Apellidos.ToUpper().Contains(criterio.ToUpper())|| 
                                             a.DNI.Equals(criterio) ||
                                             a.CodigoUpn.Equals(criterio) 
                                            )
                             ).ToList();
            }

            return participante;

            //var query = from e in Context.Participantes.Include("")
            //            select e;

            //if (criterio != null && criterio != "")
            //{
            //    query = from e in query
            //            select e;
            //}

            //return query.ToList();
        }

        public Participante GetParticipanteById(Int32 id)
        {
            return Context.Participantes.Find(id);
        }

        public void AddParticipante(Participante participante)
        {

            Context.Participantes.Add(participante);
            Context.SaveChanges();
           
        }

        public void UpdateParticipante(Participante participante)
        {
            try
            {
                Context.Entry<Participante>(participante).State = System.Data.EntityState.Modified;
                Context.SaveChanges();
            }
            catch { }

        }

        public void RemoveParticipante(Int32 id)
        {
            var existe = Context.Participantes.Find(id);

            if (existe != null)
            {
                Context.Participantes.Remove(existe);
                Context.SaveChanges();
            }
            //throw new NotImplementedException();
        }

        public List<Participante> GetParticipanteByCriterioCodDni(string criterio)
        {
            var participante = Context.Participantes.ToList();
            if (criterio != "" && criterio != null)
            {
                participante = (participante.Where(
                                             a => a.CodigoUpn.ToUpper().Contains(criterio.ToUpper())
                                             || a.DNI.ToUpper().Contains(criterio.ToUpper()))
                             ).ToList();
            }

            return participante;
        }

        public IPagedList<Participante> GetAllFromParticipantes(int page, int size)
        {
            var query = from p in Context.Participantes
            //.Include("TipoActividad")
            //.Include("Estado")
                        orderby p.Apellidos
                        select p;

            return query.OrderBy(p => p.Apellidos).ToPagedList(page, size);
        }

        public IPagedList<Participante> GetParticipantesByCriterio(string criterio, int page, int size)
        {
            throw new NotImplementedException();
        }

        //public Participante GetParticipanteByCodyDNI(string criterio)
        //{
        //    var participante = Context.Participantes.ToList();
        //    if (criterio != "" && criterio != null && !string.IsNullOrEmpty(criterio))
        //    {
        //        participante = (participante.Where( a => a.DNI.Equals(criterio) ||
        //                                     a.CodigoUpn.Equals(criterio)
        //                                    )
        //                     ).ToList();
        //    }

        //    return participante.SingleOrDefault();
        //}
    }
}
